PL/SQL 将本地集合传递给流水线函数答案

您所在的位置:网站首页 plsql 函数返回 PL/SQL 将本地集合传递给流水线函数答案

PL/SQL 将本地集合传递给流水线函数答案

2023-04-08 03:23| 来源: 网络整理| 查看: 265

我需要将一个本地定义的表类型传递给一个函数,该函数是一个返回另一个本地定义的表类型的流水线函数。

这里是示例数据:

create table my_tab (i NUMBER, n VARCHAR2(30)); insert into my_tab values (1, 'Peter'); insert into my_tab values (2, 'Dakshesh'); insert into my_tab values (1, 'Maggie'); insert into my_tab values (3, 'Madhu'); commit;

我的代码是:

CREATE OR REPLACE PACKAGE my_pkg IS TYPE t_col IS RECORD( i NUMBER, n VARCHAR2(30)); TYPE t_nested_table IS TABLE OF t_col; TYPE t_number IS TABLE OF NUMBER; FUNCTION iterate_table RETURN t_number PIPELINED; FUNCTION return_table(in_t_num t_number) RETURN t_nested_table PIPELINED; g_number t_number ; g_nested_number t_nested_table ; END my_pkg; /

主体:

CREATE OR REPLACE PACKAGE BODY my_pkg IS FUNCTION iterate_table RETURN t_number PIPELINED IS BEGIN IF ( (g_number IS NOT NULL) AND (g_number.EXISTS (1))) THEN FOR i IN 1 .. g_number.COUNT LOOP IF g_number (i) IS NOT NULL THEN PIPE ROW (g_number (i)); END IF; END LOOP; END IF; RETURN; EXCEPTION WHEN OTHERS THEN RAISE; END iterate_table; FUNCTION return_table(in_t_num t_number) RETURN t_nested_table PIPELINED IS l_row t_nested_table ; CURSOR cur_test IS select mt.i, mt.n from my_tab mt, TABLE(iterate_table ) tab where mt.i = tab.column_value; BEGIN OPEN cur_test; FETCH cur_test BULK COLLECT into l_row; CLOSE cur_test; FOR i IN 1..l_row.COUNT LOOP PIPE ROW(l_row(i)); END LOOP; RETURN; END return_table; END my_pkg; /

现在这段代码编译成功了,当我尝试像流水线函数一样调用它时,它给出了错误-

select * from table(my_pkg.return_table(my_pkg.t_number(1)));

错误- ORA-00902: invalid datatype 00902. 00000 - "invalid datatype" *Cause: *Action: Error at Line: 14 Column: 41

此代码的两个先决条件是 -

集合应该都是本地定义的。

函数应该是流水线的。

救命!!

我没有收到任何关于表及其单个表的错误,因此没有外键约束。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3